// 模版
#include <iostream>
using namespace std;

// 函数模版 下面有两种写法
template <typename T>   // 模版类型
// template <class V>      // 模版类型

// a,b是引用类型，变量的别名（指针常量）
// 编译时，可以生成多个具体类型的函数
void swap(T* a, T* b)
{
    T tmp = *a;
    *a = *b;
    *b = tmp;
}

// void swap(int *a, int *b)
// {
//     int t = *a;
//     *a = *b;
//     *b = t;
// }

// void swap(double *a, double *b)
// {
//     double t = *a;
//     *a = *b;
//     *b = t;
// }

int main(int argc, char const *argv[])
{
    int a1 = 2;
    int a2 = 3;
    swap(&a1, &a2);
    cout << a1 << a2 << endl;

    double d1 = 4;
    double d2 = 5;
    swap(&d1, &d2);
    cout << d1 << d2 << endl;

    return 0;
}
